<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var name = "张三";
      function print() {
        console.log(this.name);
      }
      //print();// 直接打出 "张三"。函数中的this指向全局的。而name就是全局变量

      function open(age, addr) {
        console.log(
          "我的名字是" + this.name + ",年龄是:" + age + "岁,我住在:" + addr
        );
      }
      var my = {
        name: "李四",
      };
      //call()、apply() 函数第一个参数 是作用域
      // open.call(my,15,"深圳");// "李四"。open()函数中的this指向改变了，不在指向全局的，而是指向了 my对象
      // open.apply(my, [18, "北京"]);
      //call() 函数与 apply()函数第二个参数是传参。 传递参数格式不同。apply函数是一个数组格式

      var obj = {
        fun: function () {},
        say: function () {
          // console.log(this);
          setTimeout(
            function () {
              console.log(23232);
              console.log(this);
            }.bind(this),
            3000
          );
        },
      };
      obj.say();

      //====> bind函数不会马上调用。他会返回一个函数，需要执行函数是调用他返回的函数
      // let bindfun = open.bind(my, 20, "深圳");
      // bindfun();

      // function foo () {
      //   console.log(
      //     "我的名字是" + this.name + ",年龄是:" + age + "岁,我住在:" + addr
      //   );
      // }.bind(my)
    </script>
  </body>
</html>
